package pe.com.ValoracionVivienda.views.mantenimiento.TiposTasaciones;

import java.util.Date;

import javax.persistence.EntityTransaction;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;

import pe.com.ValoracionVivienda.container.AppContainer;
import pe.com.ValoracionVivienda.domain.entities.TipoTasacion;
import pe.com.ValoracionVivienda.domain.entities.Usuario;
import pe.com.ValoracionVivienda.service.impl.TipoTasacionServiceJpaImpl;
import pe.com.ValoracionVivienda.service.interfaces.TipoTasacionService;
import pe.com.ValoracionVivienda.views.resource.shared.SP3ResourceShared;

public class ShellTipoTasacionDetalle extends Shell {
	private Text txtNombre;
	private TipoTasacion tipoTasacion;
	private Button chkActivo;
	private boolean huboCambios;

	/**
	 * Create the shell.
	 * @param display
	 */
	public ShellTipoTasacionDetalle(Display display) {
		super(display, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
		
		Label lblNewLabel = new Label(this, SWT.NONE);
		lblNewLabel.setBounds(27, 27, 55, 15);
		lblNewLabel.setText("Nombre");
		
		txtNombre = new Text(this, SWT.BORDER);
		txtNombre.setBounds(101, 24, 266, 21);
		
		Label lblActivo = new Label(this, SWT.NONE);
		lblActivo.setText("Activo");
		lblActivo.setBounds(27, 64, 55, 15);
		
		chkActivo = new Button(this, SWT.CHECK);
		chkActivo.setSelection(true);
		chkActivo.setBounds(101, 63, 93, 16);
		
		Button btnAceptar = new Button(this, SWT.NONE);
		btnAceptar.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				aceptar();
			}
		});
		btnAceptar.setBounds(195, 87, 75, 25);
		btnAceptar.setText(SP3ResourceShared.getString("Aceptar"));
		
		Button btnCancelar = new Button(this, SWT.NONE);
		btnCancelar.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				cancelar();
			}
		});
		btnCancelar.setText(SP3ResourceShared.getString("Cancelar"));
		btnCancelar.setBounds(292, 87, 75, 25);
		createContents();
		centrarEnPantalla(display);
	}
	
	public void initData(TipoTasacion tipoTasacion){
		this.tipoTasacion = tipoTasacion;
		
		if(tipoTasacion.getId() != null){
			txtNombre.setText(tipoTasacion.getNombre());
			chkActivo.setSelection(tipoTasacion.getEstado());
		}
	}

	protected void cancelar() {
		this.dispose();
	}

	protected void aceptar() {
		EntityTransaction tran = null;
		TipoTasacionService tipoTasacionService = new TipoTasacionServiceJpaImpl();
		tipoTasacion.setNombre(txtNombre.getText());
        tipoTasacion.setEstado(chkActivo.getSelection());
        
        try{
        	tran = tipoTasacionService.getTransaction();
        	tran.begin();
        	if(tipoTasacion.getId() == null) {
        		tipoTasacion.setUsuarioCreacion(new Usuario(AppContainer.ID_USUARIO));
        		tipoTasacion.setFechaCreacion(new Date());
        		tipoTasacionService.persist(tipoTasacion);
        	} else {
        		tipoTasacion.setUsuarioModificacion(new Usuario(AppContainer.ID_USUARIO));
        		tipoTasacion.setFechaModificacion(new Date());
        		tipoTasacionService.update(tipoTasacion);
        	}
        	tran.commit();
        	huboCambios = true;
        	this.close();
        } catch(Exception e){
        	tran.rollback();
        } finally {
        	tipoTasacionService.close();
        }
	}

	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText(SP3ResourceShared.getString("TipoTasacion"));
		setSize(399, 161);
	}
	
	private void centrarEnPantalla(Display display){
		Monitor primary = display.getPrimaryMonitor();
	    Rectangle bounds = primary.getBounds();
	    Rectangle rect = getBounds();
	    
	    int x = bounds.x + (bounds.width - rect.width) / 2;
	    int y = bounds.y + (bounds.height - rect.height) / 2;
	    setLocation(x, y);
	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
	public boolean getHuboCambios(){ return huboCambios;}
}
